package com.kehutong.admin.service;

import com.kehutong.admin.entity.Corp;
import com.kehutong.admin.entity.CorpModuleVersion;
import org.coraframework.inject.Inject;
import org.coraframework.json.JSONObject;
import org.coraframework.logger.Logger;
import org.coraframework.logger.LoggerFactory;
import org.coraframework.mvc.http.Bean;
import org.coraframework.mvc.http.ReqMapping;
import org.coraframework.mvc.http.result.Result;
import org.coraframework.mvc.webservice.WebService;
import org.coraframework.orm.Pool;
import org.coraframework.orm.annotation.Column;
import org.coraframework.orm.jdbc.JdbcSession;
import org.coraframework.orm.jdbc.Page;
import org.coraframework.orm.jdbc.execute.entity.FindPage;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;

/**
 * 企业模块版本服务类
 * @author: liukunlong
 * @date: 2021-08-26 10:51
 */
@WebService("/admin/service/corp/module/version")
public class CorpModuleVersionService {
    private static final Logger logger = LoggerFactory.getLogger(CorpModuleVersionService.class);

    @Inject
    private JdbcSession jdbcSession;


    /**
     * 根据条件获取公司模板版本列表
     *
     * @param jsonObject 查询对象
     * @return 公司模板版本列表
     * @throws IOException 操作异常
     */
    @ReqMapping("/page")
    public Page<CorpModuleVersion> page(JSONObject jsonObject) throws Exception {
        Page<CorpModuleVersion> result = null;
        FindPage<CorpModuleVersion> findPage = jdbcSession.findPage(CorpModuleVersion.class)
                .eq(jsonObject, "corpNo","corpName","id")
                .order("createTime", "desc")
                .page(jsonObject);
        result = findPage.exe();
        if (logger.isDebugEnabled()) {
            logger.debug("result:" + result);
        }
        return result;
    }

    /**
     * 获取公司模板版本列表
     *
     * @param jsonObject 查询对象
     * @return
     * @throws Exception
     */
    @ReqMapping("/list")
    public Object list(JSONObject jsonObject) throws Exception {
        jsonObject.put("pageNo", 1);
        jsonObject.put("pageSize", Short.MAX_VALUE);
        Page<CorpModuleVersion> page = page(jsonObject);
        return page.getList();
    }

    /**
     * 获取公司模板版本内容
     *
     * @param corpModuleVersion 公司模板版本对象
     * @return
     */
    @ReqMapping("/getCorpModuleVersion")
    public Object getCorpModuleVersion(CorpModuleVersion corpModuleVersion) {
        setHideMenu(corpModuleVersion);
        return corpModuleVersion;
    }

    /**
     * 保存公司模板版本
     *
     * @param corpModuleVersion 系统公司模板版本对象
     * @return
     */
    @Bean(newInstance = true, copy = true)
    @ReqMapping("/save")
    public Object save(CorpModuleVersion corpModuleVersion) {
        jdbcSession.insert(corpModuleVersion);
        return Result.success();
    }

    /**
     * 更新公司模板版本组及公司模板版本
     *
     * @param corpModuleVersion 系统公司模板版本对象
     * @return
     * @throws Exception
     */
    @Bean(copy = true)
    @ReqMapping("/update")
    public Object update(CorpModuleVersion corpModuleVersion) throws Exception {
        jdbcSession.updateById(corpModuleVersion);
        return Result.success();
    }


    /**
     * 删除公司模板版本
     *
     * @param corpModuleVersion 公司模板版本对象
     * @return
     */
    @ReqMapping("/delete")
    public Object delete(CorpModuleVersion corpModuleVersion) {
        jdbcSession.deleteById(CorpModuleVersion.class,corpModuleVersion.getId());
        return Result.success();
    }
    
    
    @ReqMapping("/get")
    public Object get(String companyNo) {
        Corp corp=jdbcSession.findById(Corp.class,companyNo);
        if(Objects.isNull(corp)){
            logger.warn("企业信息为空,请联系管理员!");
            return Result.success();
        }
        if(corp.isDeleted()){
            logger.warn("企业信息已经删除!");
            return Result.success();
        }
        CorpModuleVersion corpModuleVersion=jdbcSession.findOne(CorpModuleVersion.class)
                .eq("corpNo",corp.getId()).exe();
        if(Objects.isNull(corpModuleVersion)){
            corpModuleVersion= Pool.newInstance(CorpModuleVersion.class);
            corpModuleVersion.setCorpNo(corp.getId());
            corpModuleVersion.setCorpName(corp.getName());
            //资产模块版本
            corpModuleVersion.setAssetsVersion("2.0");
            //用户管理版本
            corpModuleVersion.setUserVersion("2.0");
            //工单管理版本
            corpModuleVersion.setWorkOrderVersion("2.0");
            //消息管理版本
            corpModuleVersion.setMessageOrderVersion("2.0");
            //素材管理版本
            corpModuleVersion.setMaterialVersion("0");
            //标签管理版本
            corpModuleVersion.setTagVersion("2.0");
            //话术管理版本
            corpModuleVersion.setWordsVersion("0");
            //需求预测管理版本
            corpModuleVersion.setDemandForecastVersion("0");
            //缴费模块版本
            corpModuleVersion.setPayVersion("0");
            //设备管理模块版本
            corpModuleVersion.setDeviceVersion("0");
            //门禁管理模块版本
            corpModuleVersion.setAccessControlVersion("0");




            jdbcSession.insert(corpModuleVersion);
        }
        //需要隐藏的菜单标志
        setHideMenu(corpModuleVersion);


        logger.info("CorpModuleVersionService.get-企业模块版本信息:{}",corpModuleVersion.toJSON());
        return corpModuleVersion;

    }

    /**
     * 设置模块隐藏菜单
     * @param corpModuleVersion 公司模块版本对象
     */
    private void setHideMenu(CorpModuleVersion corpModuleVersion) {
        List<String> hideMenuIds=new ArrayList<>();
        if(Objects.equals(corpModuleVersion.getAssetsVersion(),"0")){
            hideMenuIds.add("eb1066c53b2a47e3ac8194d08cddb1c9");
        }
        if(Objects.equals(corpModuleVersion.getUserVersion(),"0")){
            hideMenuIds.add("debf92205033fa4014282f9890b6e28e");
        }
        if(Objects.equals(corpModuleVersion.getWorkOrderVersion(),"0")){
            hideMenuIds.add("148c2e32c9f4d05ce32c59c8ee29b386");
        }
        if(Objects.equals(corpModuleVersion.getMessageOrderVersion(),"0")){
            hideMenuIds.add("7fc4a05df26e87748b2dc830c21d5be2");
        }
        if(Objects.equals(corpModuleVersion.getMaterialVersion(),"0")){
            hideMenuIds.add("0197297a9448e8f03c084f49f9ac9cab");
        }
        if(Objects.equals(corpModuleVersion.getTagVersion(),"0")){
            hideMenuIds.add("2d5bfb5df838fd9245e7fb287516d269");
        }
        if(Objects.equals(corpModuleVersion.getWordsVersion(),"0")){
            hideMenuIds.add("9ea448382adb4b73a15642806244616d");
        }
        if(Objects.equals(corpModuleVersion.getDemandForecastVersion(),"0")){
            hideMenuIds.add("ad3c8ed84587f7e592e87b512927dcb5");
        }
        if(Objects.equals(corpModuleVersion.getPayVersion(),"0")){
            hideMenuIds.add("5045c15d3c2541620616f7b440d9f4f3");
            hideMenuIds.add("21e0112266d9172b06ee382461ceffe3");
            hideMenuIds.add("fc24e1fa63c06c4dc25526569146beab");
            hideMenuIds.add("fd1ac3397e9aca0f8d66cee75795947b");
        }
        if(Objects.equals(corpModuleVersion.getDeviceVersion(),"0")){
            hideMenuIds.add("0fb5fa79a8bcceca3e6f4c3d123a3fa8");
        }
        if(Objects.equals(corpModuleVersion.getAccessControlVersion(),"0")){
            hideMenuIds.add("a8798ef2efa6201c32cbfbda9c8e5e69");
            hideMenuIds.add("218de906c08c459cc1fa3e700ada396f");
        }
        corpModuleVersion.setHideMenuId(hideMenuIds);
    }


}
